'''
Created on 18/04/2013

@authors: jean, cristian,victor
'''
from pm.database import db
from sqlalchemy.orm import relationship
import datetime

class Proyectos(db.Model):
    '''
    Clase que representa los proyectos existentes en el sistema
    '''
    __tablename__ = 'proyectos'
    id_proyecto = db.Column(db.Integer, primary_key=True, nullable=False)
    '''
       PrimaryKey de la tabla
    '''
    nombre = db.Column(db.String(500), nullable=False)
    '''
       Nombre del proyecto
    '''
    descripcion = db.Column(db.String(500), nullable=False)
    '''
       Descripcion del proyecto
    '''
    estado = db.Column(db.Integer, nullable=False)
    '''
       Indica el estado del Proyecto
    '''
    cantidad_fases = db.Column(db.Integer, nullable=False)
    '''
       Cantidad de fases que posee un proyecto
    '''    
    nombre = db.Column(db.String(50),unique=True, nullable=False)
    '''
       Nombre del proyecto
    ''' 
    fecha_inicio = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    '''
       Fecha de Inicio del Proyecto
    '''    
    fecha_fin = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    '''
       Fecha de fin del Proyecto
    '''
    fecha_creacion = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    """
        Fecha de creacion del proyecto
    """
    complejidad = db.Column(db.Integer, nullable=True)
    """
        complejidad del proyecto en conjunto
    """
    activo = db.Column(db.Boolean, nullable=False)
    """
        El proyecto se encuentra activo o no
    """
    cantidad_miembros = db.Column(db.Boolean, nullable=False)
    
    relationship("fases")

    def __init__(self, descripcion, estado, cantidad_fases, nombre, fecha_inicio, fecha_fin, fecha_creacion,complejidad,cantidad_miembros,activo = True):
        '''
        @param descripcion: descripcion del proyecto
        @param estado: estado del proyecto
        @param cantidad_fases: cantidad de fases del proyecto
        @param nombre: nombre del proyecto
        @param fecha_inicio: fecha de inicio del proyecto
        @param fecha_fin: fecha estimada de finalizacion del proyecto 
        @param fecha_creacion: es la fecha en la que se creo el proyecto en el sistema
        @param complejidad: es la suma de las complejidades de todos los items del proyecto 
        @param activo: indica si el proyecto esta activo
        @parma cantidad_miembros : si es que ya se asigno el correspondiente comite al proyecto 
        '''
        self.descripcion = descripcion
        self.estado = estado
        self.cantidad_fases = cantidad_fases
        self.nombre = nombre
        self.fecha_inicio = fecha_inicio
        self.fecha_fin = fecha_fin
        self.fecha_creacion= fecha_creacion
        self.complejidad = complejidad
        self.activo = activo
        self.cantidad_miembros = cantidad_miembros
    
    def __repr__(self):
        return '{id_proyecto:%s, nombre:%s, descripcion:%s, estado:%s, cantidad_fases%s, complejidad:%s, cantidad_miembros:%s}' % (self.id_proyecto, self.nombre, self.descripcion, self.estado, self.cantidad_fases, self.complejidad, self.cantidad_miembros)
    
    def __json__(self):
        '''
            devuelve el json que representa a proyectos
        '''
        if self.estado==1:
            estado="No Iniciado"
        if self.estado==2:
            estado="Iniciado"
        if self.estado==3:  
            estado= "Finalizado"
             
        return {'id':self.id_proyecto , 
                'descripcion': self.descripcion, 
                'estado': estado, 
                'cantidad_fases': self.cantidad_fases, 
                'nombre': self.nombre, 
                'fecha_inicio':  str(self.fecha_inicio),
                'fecha_fin':  str(self.fecha_fin),
                'fecha_creacion': str(self.fecha_creacion),
                'complejidad': self.complejidad,
                'activo': self.activo,
                'cantidad_miembros' : self.cantidad_miembros
                }